package com.user.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.user.dao.dish.QueryPageDish;
import com.user.domain.Dish;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.util.Map;

/**
 * @author YU
 * @description 针对表【dish】的数据库操作Mapper
 * @createDate 2023-12-29 11:09:06
 * @Entity com.user.domain.Dish
 */
public interface DishMapper extends BaseMapper<Dish> {


    /**
     * 查询菜名在当前餐厅是否重复
     *
     * @param name         菜名
     * @param restaurantId 餐厅Id
     * @return 个数
     */
    @Select("select count(1) from dish where name = #{name} and restaurant_id = #{restaurantId}")
    Integer selectDishNameCount(String name, Integer restaurantId);

    /**
     * 查询菜品库存
     *
     * @param id 菜品Id
     * @return 库存
     */
    @Select("select number from dish where id = #{id}")
    Integer selectDishNumberById(Integer id);

    /**
     * 查询菜品价格
     *
     * @param id 菜品Id
     * @return 价格
     */
    @Select("select price from dish where id = #{id}")
    BigDecimal selectDishPriceById(Integer id);

    /**
     * 查询菜品名
     *
     * @param id 菜品Id
     * @return 菜品名
     */
    @Select("select name from dish where id = #{id}")
    String selectDishNameById(Integer id);

    /**
     * 分页查询菜品
     *
     * @param dish    查询条件
     * @param mapPage 分页信息
     * @return 菜品列表
     */
    IPage<Dish> selectDish(@Param("dish") QueryPageDish dish, @Param("mapPage") Page<Dish> mapPage);

    /**
     * 查询菜品个数
     *
     * @param dish 查询条件
     * @return 个数
     */
    long selectDishCount(@Param("dish") QueryPageDish dish);

    /**
     * 更新菜品库存
     *
     * @param dishId  菜品Id
     * @param dishNum 菜品数量
     */
    @Select("update dish set number = number - #{dishNum} where id = #{dishId}")
    void updateDishNumberById(Integer dishId, Integer dishNum);

    /**
     * 更新菜品销量
     *
     * @param dishId  菜品Id
     * @param dishNum 菜品数量
     */
    @Select("update dish set sales = sales + #{dishNum} where id = #{dishId}")
    void updateDishSalesById(Integer dishId, Integer dishNum);

    /**
     * 更新菜品评分旧评分+新评分/2
     *
     * @param dishId  菜品Id
     * @param integer 评分
     */
    @Select("update dish set score = (score + #{integer})/2 where id = #{dishId}")
    void updateDishScoreById(Integer dishId, BigDecimal integer);

    /**
     * 查询菜品图片
     *
     * @param id 菜品Id
     * @return 图片
     */
    @Select("select image from dish where id = #{id}")
    String selectPhotoById(Integer id);

    /**
     * 查询菜品价格
     *
     * @param id 菜品Id
     * @return 图片
     */
    @Select("select price from dish where id = #{id}")
    BigDecimal selectMoneyById(Integer id);

    /**
     * 查询所有菜品价格
     *
     * @return 菜品价格
     */
    @Select("select id, price from dish")
    Map<Integer, BigDecimal> getAllDishPrices();

}




